Technote 1097
Desktop Printing Revealed
ñ⁄éü
èâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃåªç›
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃñæì˙
ñ¢óàÇÕÇ∑ÇÆÇªÇ±Ç…Ç†ÇÈ
DesktopPrinting.h
DTPSample.c
|
DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÕ1997îN2åéÇ…î≠çsÇ≥ÇÍÅAÉvÉäÉìÉ^ÉhÉâÉCÉoäJî≠é“Ç™ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\Ç…ëŒâûÇ∑ÇÈÇΩÇflÇÃèÓïÒÇ™ãLèqÇ≥ÇÍǃǢNjǵÇΩÅBMac OS 8.5Ç≈ÇÕÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™èâÇflǃÉTÉ|Å[ÉgÇ≥ÇÍÇ‹Ç∑Ç™ÅAé·ä±ÇÃédólïœçXLJÇ≤ǥǢNjÇ∑ÅBÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\Ç…ëŒâûǵÇΩÉvÉäÉìÉ^•ÉhÉâÉCÉoÇäJî≠Ç∑ÇÈç€ÇÕDZÇÃÉeÉbÉNÉmÅ[ÉgÇÃç≈êVèÓïÒÇÇ≤óòópâ∫Ç≥Ç¢ÅB
1989îNÅASystem 6ÇΔMultiFinderÇÃìoèÍÇ≈ÅAÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸Ç™â¬î\ÇΔÇ»ÇËNjǵÇΩÅBìñèâÅAèëófiÇàÛç¸ÇµÇΩíºå„Ç…MacintoshÇÃÉRÉìÉgÉçÅ[ÉãÇâÒïúÇ≈Ç´ÅAìØéûÇ…ÉvÉäÉìÉ^ÉhÉâÉCÉoÇ™ÉoÉbÉNÉOÉâÉEÉìÉhÇ≈àÛç¸èàóùÇÇ∑ÇÈíˆìxÇæÇΔçlǶÇÁÇÍǃǢNjǵÇΩÇ™ÅAèâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\ÇÕíNLJǙëzëúǵÇΩÇÊÇËLJÇÕÇÈǩDžã≠óÕÇ≈džÇËÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Çä‹ÇflǃÅAåªç›ÇÃàÛç¸ÉeÉNÉmÉçÉWÅ[ëSî Ç…ÇÌÇΩÇÈäÓëbDžǻǡǃǢNjÇ∑ÅBǵǩǵÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉTÉ|Å[ÉgÇ…ä÷êSÇéùǬÉfÉxÉçÉbÉpÇ…ÇΔǡǃÇÕécîOǻDZÇΔÇ≈Ç∑Ç™ÅAÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ãZèpÇÃëÂïîï™Ç™É}ÉjÉÖÉAÉãâªÇ≥ÇÍǃǢǻǢÇÃÇ™åªèÛÇ≈Ç∑ÅB
1994îNÅAStyleWriter 1200ÉhÉâÉCÉoÇ®ÇÊÇ—LaserWriter 8.3ÇÃìoèÍÇΔÇΔLJDžÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ãZèpÇ™ì±ì¸Ç≥ÇÍNjǵÇΩÅBèâä˙ÉäÉäÅ[ÉXÇ©ÇÁåªç›Ç‹Ç≈ÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÕï°êîÇÃã@î\ägí£ÇΔïsâ¬éãëÆê´ÇLJǬÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃèWçáÇΔǵǃë∂ç›ÇµÇƒÇ´Ç‹ÇµÇΩÅBDZÇÍÇ‹Ç≈ÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉTÉ|Å[ÉgÇ…ä÷êSÇéùǬÉfÉxÉçÉbÉpÇ…ÇΔǡǃÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉCÉÅÅ[ÉWÇÕïKÇ∏ǵLJñæämǩǬÉVÉìÉvÉãǻLJÇÃÇ≈ÇÕdžÇËÇ‹ÇπÇÒÇ≈ǵÇΩÇ™ÅADZÇÃÉeÉNÉmÉçÉWÅ[Ç™è´óàìIDžLJägí£Ç≥ÇÍǃǢÇ≠íõåÛÇ™å©Ç¶ÇƒÇ´ÇΩåªç›ÅAǪÇÃãZèpÇóùâÇ∑ÇÈDZÇΔÇÕà»ëODžLJNjǵǃèdóvÇ»ñ‚ëËÇ…Ç»ÇËǬǬdžÇËÇ‹Ç∑ÅB
DZÇÃñ‚ëËDžǬǢǃäÆëSÇ»ÉXÉgÅ[ÉäÅ[Çï`Ǣǃå©ÇπÇÈDZÇΔÇÕLJÇΔÇÊÇËïsâ¬î\Ç≈Ç∑ǵÅAMac OS XÇÃì±ì¸ÇΔÇΔLJDžèÛãµÇ™çƒìxïœçXÇ≥ÇÍÇÈDZÇΔLJämé¿Ç≈Ç∑Ç™ÅADZÇÃÉeÉbÉNÉmÅ[ÉgÇ≈ÇÕÅAMac OS Xà»ëOÇÃÇ∑Ç◊ǃÇÃMac OSÇÃÉoÅ[ÉWÉáÉìÇ…ëŒâûǵÇΩÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ÇëŒè€Ç…ǵǃǢNjÇ∑ÅBDZÇÃíÜÇ…ÇÕÅAÉTÅ[ÉhÉpÅ[ÉeÉBÇÃÉfÉxÉçÉbÉpÇ™ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇóòópÇ≈Ç´ÇÈÇÊǧDžÇ∑ÇÈÇΩÇflÇÃèdóvÇ»ïœçXéñçÄLJä‹Ç‹ÇÍǃǢNjÇ∑ÅBÉvÉäÉìÉ^ÉhÉâÉCÉoÇÇ∑Ç≈Ç…äJî≠ǵǃǢÇÈèÍçáÇÕÅADZÇÃÉeÉbÉNÉmÅ[ÉgÇ≈ê‡ñæÇ≥ÇÍǃǢÇÈÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉTÉ|Å[ÉgÇí«â¡Ç∑ÇÈÇΩÇflÇ…ïKóvÇ»éñçÄÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
|
èâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\
èâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\ÇÕéüÇÃÇÊǧǻLJÇÃÇ≈ǵÇΩÅBÉvÉäÉìÉ^ÉhÉâÉCÉoÇÕÅAëŒè€ÇΔÇ»ÇÈäeÉyÅ[ÉWÇQuickDrawÉsÉNÉ`ÉÉÇΔǵǃÅAÉVÉXÉeÉÄÉtÉHÉãÉ_ì‡ÇÃì¡éÍÇ»ÉtÉHÉãÉ_ÅiÅuSpoolÅvÉtÉHÉãÉ_ÅjÇ…çÏê¨Ç≥ÇÍÇΩÉeÉìÉ|ÉâÉäÉtÉ@ÉCÉãÅiÉXÉvÅ[ÉãÉtÉ@ÉCÉãÅjÇÃÉfÅ[É^ÉtÉHÅ[ÉNÇ…ï€ë∂ǵǃǢNjǵÇΩÅBÇ‹ÇΩÅADZÇÃÉtÉ@ÉCÉãÇÃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇ…äiî[Ç≥ÇÍÇÈèÓïÒLJdžÇËNjǵÇΩÅBDZÇÃèÓïÒÇÕÅAÉyÅ[ÉWÉtÉHÅ[É}ÉbÉgÅAèëófiñºÅAǪÇÃëºÇÃÉWÉáÉuèÓïÒÅAÇ®ÇÊÇ—äeÉyÅ[ÉWÇÃÉfÅ[É^ÇÃêÊì™Ç÷ÇÃÉIÉtÉZÉbÉgÇãLèqǵǃǢNjǵÇΩÅBÉVÉXÉeÉÄãNìÆéûÇ…MultiFinderÇ…ÇÊǡǃãNìÆÇ≥ÇÍÇÈì¡éÍÇ»ÉAÉvÉäÉPÅ[ÉVÉáÉìÅiBackgrounderÅjÇÕÅAÉvÉäÉìÉ^ÉhÉâÉCÉoÇ…ÇÊǡǃçÏê¨Ç≥ÇÍÇÈèëófiÇäƒéãǵÅAïKóvÇ…âûÇ∂ǃÉvÉäÉìÉgÉÇÉjÉ^ÇãNìÆÇµÇƒÇ¢Ç‹ÇµÇΩÅiBackgrounderÇÕǪÇÃå„ÅASystem 7Ç≈FinderÇ…ìùçáÇ≥ÇÍNjǵÇΩÅjÅBÉvÉäÉìÉgÉÇÉjÉ^ÇÕÉoÉbÉNÉOÉâÉEÉìÉhÇ≈é¿çsÇ≥ÇÍÅAÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÉvÉäÉìÉ^ÉhÉâÉCÉoÇ…ãüããÇ∑ÇÈã@î\Çâ ÇΩǵǃǢNjǵÇΩÅB
ÉvÉäÉìÉgÉÇÉjÉ^ÇÕÅAí èÌÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔÇŸÇ⁄ìØÇ∂ï˚ñ@Ç≈ÉvÉäÉìÉ^ÉhÉâÉCÉoÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊǡǃÅAǪÇÃà–óÕÇî≠äˆÇµÇ‹Ç∑ÅBÇΩÇæÇµÅAÉhÉâÉCÉoÇÃ'PDEF' 0 ÉäÉ\Å[ÉXÇ≈ÇÕÇ»Ç≠ÅA'PDEF' 126 ÉäÉ\Å[ÉXÅi'PDEF' 0 ÉäÉ\Å[ÉXÇΔìØÇ∂ÉtÉHÅ[É}ÉbÉgÇéùǬÅjÇ™åƒÇ—èoÇ≥ÇÍÇÈì_Ç™àŸÇ»ÇËÇ‹Ç∑ÅBPrOpen Ç™åƒÇ—èoÇ≥ÇÍÇΩíºå„Ç…ÅiPrOpenDoc Ç™åƒÇ—èoÇ≥ÇÍÇÈëOÇ…ÅjÅAì¡éÍÇ»PrGeneral ÉRÅ[ÉhÇ™ëóêMÇ≥ÇÍÅAǪÇÃå„ÅAåƒÇ—èoÇ∑ïKóvÇÃdžÇÈí ímä÷êîÇ÷ÇÃÉ|ÉCÉìÉ^Ç™ÉvÉäÉìÉ^ÉhÉâÉCÉoÇ…ëóÇÁÇÍÇ‹Ç∑ÅBDZÇÃå„ÅAÉvÉäÉìÉgÉÇÉjÉ^Ç≈ÇÕÅAäiî[Ç≥ÇÍǃǢÇÈÉyÅ[ÉWÉfÅ[É^ÇÉhÉâÉCÉoÇ…ëóêMǵǃÅAäeÉyÅ[ÉWÇàÛç¸ÇµÇ‹Ç∑ÅBDZǧǵÇΩÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\ÇÕÅAéüÇÃÇÊǧǻ2ǬÇÃÉPÅ[ÉXÇ≈ÇÕÅAåªç›Ç≈LJÉvÉäÉìÉgÉ}ÉlÅ[ÉWÉÉÇ…ÇÊǡǃégópÇ≥ÇÍǃǢNjÇ∑ÅBǬNjÇËÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢǻǢÇΔÇ´ÅiÇ‹ÇΩÇÕégópí‚é~DžǻǡǃǢÇÈÇΔÇ´ÅjÇΔÅAFinderÇ™é¿çsǵǃǢǻǢÇΔÇ´ÅiFinderÇÃë„ÇÌÇËÇ…At EaseÇ™é¿çsǵǃǢÇÈèÍçáǻǫÅjÇ≈Ç∑ÅB
èâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\ÇóùâÇ∑ÇÈÇΩÇflÇ…ÇÕÅAǪÇÃÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃç\ë¢ÇímÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇ…ÇÕéüÇÃÉäÉ\Å[ÉXÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅiDZÇÃÉeÉbÉNÉmÅ[ÉgÇ≈åæãyÇ∑ÇÈç\ë¢ëÃÇÕÇ∑Ç◊ǃ68KÉAÉâÉCÉìÉÅÉìÉgÇéùÇøÇ‹Ç∑ÅjÅB
Åú 'PREC' 3 - ÉvÉäÉìÉgÉåÉRÅ[Éh
Åú 'alis' -8192 - ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇçÏê¨ÇµÇΩÉvÉäÉìÉ^ÉhÉâÉCÉoÇÃÉGÉCÉäÉAÉX
Åú 'ics#' 131 - ÉvÉäÉìÉgÉÇÉjÉ^Ç…ï\é¶Ç≥ÇÍÇÈÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃÉAÉCÉRÉìÅiè¨Åj
Åú 'PREC' 124 - ÉvÉäÉìÉ^ñº
Åú 'PREC' 126 - ÉWÉáÉuèÓïÒ
typedef {
short version; // èÌÇ…1
short flags; // èÌÇ…0
short numPages; // ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃÉyÅ[ÉWêî
short numCopies; // ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃïîêî
OSType creator; // ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇçÏê¨ÇµÇΩ
// ÉvÉäÉìÉ^ÉhÉâÉCÉoÇÃÉNÉäÉGÅ[É^É^ÉCÉv
Str31 appName; // ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇçÏê¨ÇµÇΩ
// ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃñºëO
} PREC126Record, *PREC126Ptr, **PREC126Handle;
Åú 'STR ' -8192 Å| ÉvÉäÉìÉ^ÉhÉâÉCÉoÇÃÉtÉ@ÉCÉãñº
Åú 'STR ' -8189 Å| èëófiñº (ÉuÉâÉìÉNÇñÑÇflçûÇ›ÅAèÌÇ… 80 ÉoÉCÉgÇÃï∂éöóÒDžǵNjÇ∑)
ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃÉfÅ[É^ÉtÉHÅ[ÉNÇÕSpoolFileHeader ç\ë¢ëÃÇ≈énÇ‹ÇËÅAǪÇÃå„Ç…ÉyÅ[ÉWÇ™ë±Ç´Ç‹Ç∑ÅB
typedef struct {
short version; // èÌÇ…1
long fileLen; // ÉwÉbÉ_Çä‹ÇfiÉtÉ@ÉCÉãÇÃÉTÉCÉY
long fileFlags; // èÌÇ…0
short numPages; // ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃÉyÅ[ÉWêî
TPrint printRecord; // PREC 3Çì«Ç›çûÇflǻǢèÍçáÇÃÇ›égóp
} SpoolFileHeader, *SpoolFileHeaderPtr, **SpoolFileHeaderHandle;
typedef struct {
long pictFlags; // èÌÇ…0
Picture thePict; // â¬ïœí∑
long pageOffset; // DZÇÃÉyÅ[ÉWÇÃPICTÇÃêÊì™Ç÷ÇÃ
// ÉIÉtÉZÉbÉg
} SpoolPage;
ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÕÅAÉhÉâÉCÉoÇ…ÇÊǡǃÅAÉVÉXÉeÉÄÉtÉHÉãÉ_ì‡ÇÃÅuSpoolÅvÉtÉHÉãÉ_Ç‹ÇΩÇÕÅuÉvÉäÉìÉgÉÇÉjÉ^èëófiÅvÉtÉHÉãÉ_ÇÃíÜÇ…çÏê¨Ç≥ÇÍÇ‹Ç∑ÅBÅiMac OS 8ÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™ÉAÉNÉeÉBÉuÇ»èÍçáÇÕÅAåªç›ÇÃè»ó™éûÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÉtÉHÉãÉ_ÇÃíÜÇ…çÏê¨Ç≥ÇÍÇ‹Ç∑ÅBFindFolderkPrintMonitorDocsFolderType ÉZÉåÉNÉ^ÇégópÇ∑ÇÈÇΔÅAê≥ǵǢÉtÉHÉãÉ_ÇåüèoÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÅjèëÇ´çûÇ‹ÇÍÇÈÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÕÅA'?job' ÇΔǢǧÉtÉ@ÉCÉãÉ^ÉCÉvÇΔ'prmt' ÇΔǢǧÉNÉäÉGÅ[É^É^ÉCÉvÇéùÇøÇ‹Ç∑ÅBÉtÉ@ÉCÉãÇÃèëÇ´çûǛǙèIóπÇ∑ÇÈÇΔÅAÉhÉâÉCÉoÇÕÉtÉ@ÉCÉãÉ^ÉCÉvÇ'pjob' Ç…ïœçXǵNjÇ∑ÅBÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉhÉâÉCÉoLJÉTÉ|Å[ÉgÇ≥ÇÍǃǢÇÈèÍçáÇÕÅAÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉhÉâÉCÉoÇÕAppleÉCÉxÉìÉgÇFinderÇ…ëóêMǵǃÅAêVǵǢÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇ™çÏê¨Ç≥ÇÍÇΩDZÇΔÇí ímÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑Åiè⁄ç◊DžǬǢǃÇÕå„èqǵNjÇ∑ÅjÅB
ÉvÉäÉìÉgÉÇÉjÉ^ÅiÇ‹ÇΩÇÕÉfÉXÉNÉgÉbÉvÅEÉvÉäÉìÉgÉÇÉjÉ^ÅjÇ™ÉWÉáÉuÇÉvÉäÉìÉgÇ∑ÇÈÇΔÇ´ÅAÉhÉâÉCÉoÇÃPrOpen ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÅAÇ≥ÇÁÇ…à»â∫Ç…é¶Ç∑ç\ë¢ëÃÅiÅADesktopPrinting.h ÉwÉbÉ_ÉtÉ@ÉCÉãÇéQèΔÅjÇä‹ÇfiPrGeneral Ç™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃå„ÅAÉvÉäÉìÉgÉÇÉjÉ^Ç≈ÇÕÅAÉhÉâÉCÉoÇ™íËä˙ìIÇ…åƒÇ—èoÇ∑ïKóvÇÃdžÇÈpIdleProc Çä‹ÇfiPrOpenDoc ÇåƒÇ—èoǵNjÇ∑ÅBPrOpenPage ÇΔPrClosePage ÇÕèëófiÇÃäeÉyÅ[ÉWÇ≤ÇΔÇ…åƒÇ—èoÇ≥ÇÍÅAǪÇÃåãâ ÅAǪÇÃÉyÅ[ÉWÇ™ÉhÉâÉCÉoÇ…ÉvÉäÉìÉgÇ≥ÇÍÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB
// ä÷êîÇÃÉvÉçÉgÉ^ÉCÉv
typedef pascal void (*DTPAsyncErrorNotificationProcPtr) (StringHandle string);
typedef pascal void (*DTPEndNotificationProcPtr) ();
typedef pascal Boolean (*DTPInForegroundProcPtr) ();
typedef pascal void (*DTPStatusMessageProcPtr) (StringHandle string);
// ÉvÉäÉìÉgÉÇÉjÉ^ãyÇ—ÉfÉXÉNÉgÉbÉvÅEÉvÉäÉìÉgÉÇÉjÉ^Ç™í ímÇÃÇΩÇflÇ…
// égópÇ∑ÇÈPrGeneralÉRÅ[Éh
#define kPrintMonitorPrGeneral -3
// TPrintMonitorPrintingData
// ÉNÉâÉVÉbÉNÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ÇΔÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç
// ÉTÉ|Å[ÉgǵǻǢèÍçáÇ…égópÇ≥ÇÍÇÈ
typedef struct {
short iOpCode; // kPrintMonitorPrGeneral
short iError;
long iReserved; // 0 = ÉvÉäÉìÉgÉÇÉjÉ^
THPrint hPrint;
short noProcs; // í ímä÷êîÇÃêî
long iReserved2;
DTPAsyncErrorNotificationUPP pAsyncNotificationProc; // í ímÇäJénÇ≥ÇπÇÈUPP
DTPEndNotificationUPP pAsyncEndnotifyProc; // í ímÇèIóπÇ≥ÇπÇÈUPP
DTPInForegroundUPP pDTPInForegroundProc; // ÉvÉäÉìÉgÉÇÉjÉ^Ç™
// ëSñ DždžÇÈǩǫǧǩÇÃämîF
} TPrintMonitorPrintingData;
// TDesktopPrintMonitorPrintingData
// ÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÉTÉ|Å[ÉgǵǃǢÇÈèÍçáÇ…égópÇ≥ÇÍÇÈ
typedef struct {
short iOpCode; // kPrintMonitorPrGeneral
short iError;
long iReserved; // 1 = ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉgÉÇÉjÉ^
THPrint hPrint;
short noProcs; // í ímä÷êîÇÃêî
long iReserved2;
DTPAsyncErrorNotificationUPP pAsyncNotificationProc; // í ímÇäJénÇ≥ÇπÇÈUPP
DTPEndNotificationUPP pAsyncEndnotifyProc; // í ímÇèIóπÇ≥ÇπÇÈUPP
DTPInForegroundUPP pInForegroundProc; // ÉvÉäÉìÉgÉÇÉjÉ^Ç™
// ëSñ DždžÇÈǩǫǧǩÇÃämîF
DTPStatusMessageUPP pStatusMessageProc; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^
// ÉEÉCÉìÉhÉEÇÃèÛãµÇçXêVÇ∑ÇÈ
} TDesktopPrintMonitorPrintingData;
ÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\ÇégǡǃàÛç¸Ç∑ÇÈèÍçáÅAÉvÉäÉìÉgÉÇÉjÉ^ÇΔÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉgÉÇÉjÉ^ÇÕÅAPrOpenDoc ÇåƒÇ—èoÇ∑íºëOÇ…DialogPtr ÇÉçÅ[ÉÅÉÇÉäÇÃÉOÉçÅ[ÉoÉãïœêîÅiApplScratch ÅjÇ…äiî[ǵNjÇ∑ÅBÉhÉâÉCÉoÇ≈ÇÕÅAGetDialogItem ÇΔSetDialogItemText ÇégǡǃÅAǪÇÃÉ_ÉCÉAÉçÉOÇÃêÊì™çÄñ⁄Ç…íÜÇ…èÛãµÉÅÉbÉZÅ[ÉWÇäiî[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
PrGeneral åƒÇ—èoǵDžÇÊÇËÅAàÛç¸Ç™ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉgÉÇÉjÉ^ÅiÉCÉìÉ^ÉtÉFÅ[ÉXÇéùÇΩǻǢÉoÉbÉNÉOÉâÉEÉìÉhÉAÉvÉäÉPÅ[ÉVÉáÉìÅjÇ©ÇÁé¿çsÇ≥ÇÍǃǢÇÈDZÇΔÇ™ñæÇÁǩǻèÍçáÇÕÅAÉ_ÉCÉAÉçÉOÇ‹ÇΩÇÕÉAÉâÅ[ÉgÇï\é¶ÇµÇƒÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÇΩÇæÇµó·äOÇÕÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉgÉÇÉjÉ^Ç™StopAlert ÇΔParamText Ç…ÉpÉbÉ`ÇìñǃǃǢÇÈDZÇΔÇ≈Ç∑ÅBParamText ÇåƒÇ—èoǵÅAÇ≥ÇÁÇ…StopAlert ÇåƒÇ—èoÇ∑ÇΔÅAFinderÇÕê›íËÇ≥ÇÍÇΩÉeÉLÉXÉgÇä‹ÇfiÉAÉâÅ[ÉgÇï\é¶ÇµÇ‹Ç∑ÅBÇΩÇæÇµÅAStopAlert Ç…ìnÇ≥ÇÍÇΩÉtÉBÉãÉ^ä÷êîÇÕåƒÇ—èoÇ≥ÇÍÇ‹ÇπÇÒÅB
ÉvÉäÉìÉ^ÉhÉâÉCÉoÇÕÉÜÅ[ÉUÇ…ÇÊÇÈÉWÉáÉuÇÃàÍéûí‚é~ÅAàÛç¸ÉLÉÖÅ[ÇÃí‚é~ÅALJǧàÍìxàÛç¸ÇÇ∑ÇÈÅAÉWÉáÉuÇÃÉLÉÉÉìÉZÉãÇÃÉIÉvÉVÉáÉìÇíÒãüÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉÜÅ[ÉUÇ™ÉAÉâÅ[ÉgÇ≈ÉIÉvÉVÉáÉìÇëIÇÒÇæå„ÅAÉvÉäÉìÉ^ÉhÉâÉCÉoÇÕÉvÉäÉìÉgÉ}ÉlÅ[ÉWÉÉÇÃÉGÉâÅ[ÉRÅ[ÉhÅiSetPrError ÅjÇà»â∫ÇÃÇ¢Ç∏ÇÍÇ©ÇÃílÇ…ê›íËǵNjÇ∑ÅB
// ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉGÉâÅ[ÉRÅ[Éh
#define kDTPHoldJobErr -4200
#define kDTPStopQueueErr -4201
#define kDTPTryAgainErr -4202
#define kDTPAbortJobErr 128
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÉÇÉjÉ^ÇÕéwíËÇ≥ÇÍÇΩílÇ…âûÇ∂ǃÅAÉWÉáÉuÇÃàÍéûí‚é~ÅAàÛç¸ÉLÉÖÅ[ÇÃí‚é~ÅALJǧàÍìxàÛç¸ÇÇ∑ÇÈÅAÉWÉáÉuÇÃÉLÉÉÉìÉZÉãÇé¿çsǵNjÇ∑ÅB
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃåªç›
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÕÅALaserWriter 8.3Ç®ÇÊÇ—StyleWriter 1200ÉvÉäÉìÉ^ÉhÉâÉCÉoÇΔÇΔLJDžì±ì¸Ç≥ÇÍNjǵÇΩÅBÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÕÅAèâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\ÇΔÇŸÇ⁄ìØÇ∂ãZèpÇçÃópǵǃǢNjÇ∑ÅBåªç›ÅAAppleèÉê≥ÉvÉäÉìÉ^ÉhÉâÉCÉoÇÃÇ›ÇÉTÉ|Å[ÉgǵǃǢNjÇ∑Ç™ÅAMac OS 8.5Ç≈ÇÕÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉvÉäÉìÉ^Ç≈LJÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇΔǵǃégǶNjÇ∑ÅBÉhÉâÉCÉoÇ…ëgÇ›çûÇfiïKóvÇÃdžÇÈí«â¡çÄñ⁄ÇDZDZÇ≈è–âÓǵNjÇ∑ÅB
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÉTÉ|Å[ÉgÇ∑ÇÈÇΩÇflÇ…í«â¡Ç∑ÇÈïKóvÇÃdžÇÈÉäÉ\Å[ÉXÇÕÅAéÂÇ…ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉAÉCÉRÉìÇ≈Ç∑ÅBÉvÉäÉìÉ^ÉhÉâÉCÉoÇäJî≠ǵǃǢÇÈÉfÉxÉçÉbÉpÇÕÅAÉhÉâÉCÉoÇÃÉNÉäÉGÅ[É^É^ÉCÉvÇΔÇΔLJDžäÆëSÇ»'BNDL' ÉäÉ\Å[ÉXÇãüããÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÇ∑Ç≈Ç…ÉhÉâÉCÉoì‡ïîÇ‚èâä˙ê›íËÉtÉ@ÉCÉãǻǫÇ≈égópÇ∑ÇÈÇΩÇflÇÃÉtÉ@ÉCÉãÉ^ÉCÉvÇΔÉAÉCÉRÉìÇΔÇÕï Ç…ÅA'dpnn' ÅA'dpcn' ÅA'dpna' ÇÃÉtÉ@ÉCÉãÉ^ÉCÉvÇ…ëŒÇ∑ÇÈÉAÉCÉRÉìÇí«â¡Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÍÇÁÇÕÅA"í èÌ" ÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÅAè»ó™éûÉfÉXÉNÉgÉbÉvÉvÉäÉìÉ^Åió÷äsÇ™ëæê¸Ç≈àÕÇ‹ÇÍǃǢÇÈÅjÅAÇ®ÇÊÇ—ÉAÉNÉeÉBÉuÇ≈ǻǢÅiÇ‹ÇΩÇÕégópâ¬î\Ç≈ǻǢÅjÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^DžǪÇÍǺÇÍëŒâûǵǃǢNjÇ∑ÅBDZÇÃó·ÇΔǵǃÅAéüÇ…Color StyleWriter 2500ÇÃÉoÉìÉhÉãÇé¶ÇµÇ‹Ç∑ÅBèÆÅALaserWriter 8ÇÃèÍçáÇÕÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉAÉCÉRÉìÇê›íËÇ∑ÇÈï˚ñ@ÇÕé·ä±àŸÇ»ÇƒÇ®ÇËÅAÉAÉCÉRÉìÇÕëŒè€ÇΔÇ»ÇÈÉvÉäÉìÉ^Ç…ëŒâûÇ∑ÇÈPPDÅiPostScript printer descriptionÅjÉtÉ@ÉCÉãÇ©ÇÁéÊìæÇ≥ÇÍÇ‹Ç∑ÅB

StyleWriter 2500ÇÃÉoÉìÉhÉãÇΔÉAÉCÉRÉì
AppleèÉê≥ÇÃÉvÉäÉìÉ^ÉhÉâÉCÉoÇ™ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇΔǵǃégópÇ≥ÇÍÅAÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇçÏê¨Ç∑ÇÈÇΔÇ´ÅAǪÇÃÉtÉ@ÉCÉãÇÕÅAèâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\Ç≈égópÇ≥ÇÍÇΩÇÃÇΔìØÇ∂ÉtÉHÉãÉ_Ç…äiî[Ç≥ÇÍÇ‹Ç∑ÅBÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\ägí£Ç™ÉtÉ@ÉCÉãÇÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç…à⁄ìÆÇµÅAé¿ç€Ç…èëófiÇÃÉvÉäÉìÉgÉvÉçÉZÉXÇäJénǵNjÇ∑ÅBÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™ÉAÉNÉeÉBÉuÇ»ÇΔÇ´ÇÕÅAéüÇ…íËã`Ç∑ÇÈÉäÉ\Å[ÉXÇ™ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇ…í«â¡Ç≥ÇÍÇ‹Ç∑ÅB
Åú 'PINX' -8200 Å| ÉyÅ[ÉWÉCÉìÉfÉbÉNÉXÉäÉ\Å[ÉX
Åú 'jobi' 1 Å| ÉvÉäÉìÉgÉWÉáÉuèÓïÒ
// PINX -8200ÅiÉyÅ[ÉWÉCÉìÉfÉbÉNÉXÉäÉ\Å[ÉXÅj
typedef struct {
short count; // pageOffsetÇÃçÄñ⁄êî
long pageoffset [1]; // ÉtÉ@ÉCÉãÇÃêÊì™Ç©ÇÁÉyÅ[ÉWÉåÉRÅ[ÉhÇ÷ÇÃ
// ÉIÉtÉZÉbÉg (ǬNjÇËÅAêÊì™ÉyÅ[ÉWÇÃèÍçáÇÕÅA
// sizeof (SpoolFileHeader) Ç…Ç»ÇÈ)
} SpoolPageIndex, *SpoolPageIndexPtr, **SpoolPageIndexHandle;
// jobi 1ÅiÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÉWÉáÉuèÓïÒÉäÉ\Å[ÉXÅj
// ÉvÉäÉìÉgóDêÊèáà
#define kDTPPrintJobUrgent 0x00000001
#define kDTPPrintJobAtTime 0x00000002
#define kDTPPrintJobNormal 0x00000003
#define kDTPPrintJobHolding 0x00001003
typedef struct {
short firstPageToPrint; // àÛç¸Ç∑ÇÈÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃêÊì™ÉyÅ[ÉW
short priority; // àÛç¸óDêÊèáà Åió·ÅFkDTPPrintJobNormalÅj
short numCopies; // àÛç¸ïîêî
short numPages; // ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃÉyÅ[ÉWêî
unsigned long timeToPrint; // óDêÊèáà Ç™kPrintJobAtTimeÇÃÇΔÇ´ÅAàÛç¸Ç∑ÇÈ
// éûçèÅiïbÅj
Str31 documentName; // èëófiñº
Str31 applicationName; // ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇçÏê¨ÇµÇΩÉAÉvÉäÉPÅ[ÉVÉáÉìñº
Str32 printerName; // ÉvÉäÉìÉ^ñº
// ÅiPREC 124ÇΔàÍívÇµÇƒÇ¢Ç»ÇØÇÍnjǻÇÁǻǢÅj
} DTPPrintJobInfo, *DTPPrintJobInfoPtr, **DTPPrintJobInfoHandle;
ï ÇÃí«â¡ÇçsǧDZÇΔÇ≈ÅAè»ó™éûÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇïœçXÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇ‹ÇΩÇÕÉhÉâÉCÉoÇÕAppleÉCÉxÉìÉgÇFinderÇ…ëóêMÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB ÅiSendAEToFinder ÇÕFinderÇ…ÉCÉxÉìÉgÇëóêMǵNjÇ∑ÅBè⁄ç◊DžǬǢǃÇÕDTPSample.c ÇÇ≤óóâ∫Ç≥Ç¢ÅBÅj
#define kDTPSignature 'dtpx'
#define aeDTPSetDefaultEventType 'pfsd'
typedef struct {
OSType dtpSignature; // kDTPSignature
OSType dtpEventType; // aeDTPSetDefaultEventTypeç≥ÇÕaeDTPSyncEventType
FSSpec dtpSpec; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃFSSpec
} DTPAppleEventData;
OSErr SetDefaultDTP (StringPtr dtpName)
{
OSErr err;
DTPAppleEventData myEvent;
myEvent.dtpSignature = kDTPSignature;
myEvent.dtpEventType = aeDTPSetDefaultEventType;
BlockMove ((Ptr) dtpSpec, (Ptr) &myEvent.dtpSpec, sizeof (FSSpec));
err = SendAEToFinder ((Ptr) &myEvent, sizeof (DTPAppleEventData));
return err;
}
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃñæì˙
Mac OS 8ÇÃìoèÍÇΔÇΔLJDžÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÕìΔóßǵÇΩã@î\ägí£Ç≈ÇÕÇ»Ç≠Ç»ÇËNjǵÇΩÅBÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\ÇÕFinderÇ…ìùçáÇ≥ÇÍÅAǪÇÃåãâ ÇΔǵǃÅAÇŸÇΔÇÒÇ«ÇÃèÍçáÇ…ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇégópÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBÇ‡ÇøÇÎÇÒÅAã@î\ägí£É}ÉlÅ[ÉWÉÉÇ≈ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉgÉÇÉjÉ^ÇΔÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^•ÉXÉvÅ[ÉâÇégópí‚é~Ç…Ç∑ÇÍÇŒÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\ÇÉIÉtÇ…Ç∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBMac OS 8.5Ç≈ÇÕÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉhÉâÉCÉoLJÉTÉ|Å[ÉgÇ≥ÇÍǃǢNjÇ∑ÅB
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÕGestaltÉZÉåÉNÉ^ÇÉCÉìÉXÉgÅ[ÉãǵÅAÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉvÉäÉìÉ^ÉhÉâÉCÉoÇ™ÉTÉ|Å[ÉgÇ≥ÇÍǃǢÇÈǩǫǧǩÇímÇÁÇπÇ‹Ç∑ÅBÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™égópâ¬î\Ç≈džǡǃLJÅAÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉvÉäÉìÉ^ÉhÉâÉCÉoÇ™ÉTÉ|Å[ÉgÇ≥ÇÍǃǢǻǢDZÇΔǙDZÇÃÉZÉåÉNÉ^Ç≈é¶Ç≥ÇÍǃǢÇÈèÍçáÇÕÅAëOèqÇÃÅuèâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ã@î\ÅvÇ≈ê‡ñæÇµÇΩï˚ñ@ÇégópÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
#define kGestaltPFEFeatures 'dtpf'
#define kThirdPartySupport 0x00000004
Boolean ThirdPartyDriverSupported(void)
{
long response;
Boolean result = false;
OSErr err = Gestalt(kGestaltPFEFeatures,&response);
if (err == noErr)
result = !!(response & kThirdPartySupport);
return result;
}
ÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™ÉTÉ|Å[ÉgÇ≥ÇÍǃǢÇÈÇΔÇ´ÅAÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉhÉâÉCÉoÇÕÅA'?job' ÇΔǢǧÉtÉ@ÉCÉãÉ^ÉCÉvÇégǡǃÅAÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇíºê⁄ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉtÉHÉãÉ_Ç…èëÇ´çûÇfiïKóvǙdžÇËÇ‹Ç∑ÅBÉXÉvÅ[ÉãçÏãΔÇ™äÆóπǵÇΩÇÁÅAÉtÉ@ÉCÉãÉ^ÉCÉvÇ'pjob' Ç…ïœçXǵNjÇ∑ÅBÉhÉâÉCÉoÇ≈ÇÕÅAÉfÉXÉNÉgÉbÉvÅEÉvÉäÉìÉ^ã@î\ägí£ÉZÉåÉNÉ^Çä‹ÇfiGestalt ÉãÅ[É`ÉìÇåƒÇ—èoǵǃÅAåªç›ëIëÇ≥ÇÍǃǢÇÈè»ó™éûÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉtÉHÉãÉ_Ç‚ÅAǪÇÃëºÇÃëΩÇ≠ÇÃçÄñ⁄ÇåàíËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃÉZÉåÉNÉ^ÇÕ'dtpx' Ç≈džÇËÅAǪÇÃèÓïÒÇÕÉnÉìÉhÉãÇΔǵǃï‘Ç≥ÇÍÇ‹Ç∑ÅBtheDTPList ÇΔGestaltDTPInfoHandle Ç…ëŒÇµÇƒÇÕDisposeHandle Çê‚ëŒåƒÇ—èoÇ≥ǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅB
// ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^èÓïÒGestaltÉZÉåÉNÉ^
// DZÇÃGestaltÉZÉåÉNÉ^ÇégǡǃÇ∑Ç◊ǃÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃèÓïÒÇ™ìæÇÁÇÍÇ‹Ç∑
enum { gestaltDTPInfo = 'dtpx' );
enum
{
kDTPGestaltStructVersion2 = 0x02008000, // ÉoÅ[ÉWÉáÉì2.0f0ÅiMac OS 8.0ÅA8.1ÅA7.xÅj
kDTPGestaltStructVersion3 = 0x03000000, // ÉoÅ[ÉWÉáÉì3.0ÅiMac OS 8.5Åj
};
// ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^èÓïÒ
typedef struct {
short vRefNum; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÉtÉHÉãÉ_ÇÃvRefNum
long dirID; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÉtÉHÉãÉ_ÇÃÉfÉBÉåÉNÉgÉäID
Str31 dtpName; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÉtÉHÉãÉ_ÇÃñºëO
OSType driverType; // ÉhÉâÉCÉoÇÃÉNÉäÉGÅ[É^
Boolean current; // è»ó™éûÉvÉäÉìÉ^Ç…éwíËÇ≥ÇÍǃǢÇÈǩǫǧǩ
Str32 printerName; // ÉvÉäÉìÉ^ÇÃÉlÉbÉgÉèÅ[ÉNñº
// (LaserWriter 8.4ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃèÍçáÇÃÇ›)
Str32 zoneName; // ÉvÉäÉìÉ^ÇÃÉ]Å[Éì
// (LaserWriter 8.4ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃèÍçáÇÃÇ›)
} DTPInfo;
// ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^GestaltÉZÉåÉNÉ^ÇÃèÓïÒ
typedef struct
{
long version; // kDTPGestaltStructVersion2ç≥ÇÕ
// kDTPGestaltStructVersion3
short numDTPs; // ÉäÉXÉgÇ…ä‹Ç‹ÇÍÇÈÉfÉXÉNÉgÉbÉvÉvÉäÉìÉ^ÇÃêî
Handle theDTPList; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃDTPInfoÉäÉXÉgÇ÷ÇÃÉnÉìÉhÉã
Handle theDTPDriverList; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉtÉ@ÉCÉãèÓïÒÉäÉXÉgÇ÷ÇÃÉnÉìÉhÉã
long reserved;
} GestaltDTPInfo, **GestaltDTPInfoHandle;
ÉXÉvÅ[ÉãÉtÉ@ÉCÉãÇÃèëÇ´çûǛǙèIóπǵÇΩÇÁÅAFinderÇ…AppleÉCÉxÉìÉgÇëóêMǵǃí ímÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBè⁄ǵÇ≠ÇÕDTPSample.c ÇÃSyncDTP ä÷êîÇÇ≤óóâ∫Ç≥Ç¢ÅB
DZÇÃÉoÅ[ÉWÉáÉìÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\Ç…ÇÕÅAÇ≥ÇÁÇ…ï ÇÃåƒÇ—èoǵLJí«â¡Ç≥ÇÍÇ‹Ç∑ÅBãÔëÃìIÇ…ÇÕÉhÉâÉCÉoÇ™ÉTÉ|Å[ÉgÇ∑ÇÈïKóvÇÃdžÇÈ3ǬÇÃêVǵǢPrGeneral ÉZÉåÉNÉ^ÅikIsSamePrinterInfo ÅAkGetPrinterInfo ÅAÇ®ÇÊÇ—kSetDefaultPrinterInfo ÅjÇ™ópà”Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÁÇÃÉZÉåÉNÉ^ÇÕÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\ägí£Ç™ÉhÉâÉCÉoÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃíÜÇÃÇ«ÇÍÇ™åªç›ÇÃè»ó™éûÉvÉäÉìÉ^Ç≈džÇÈÇ©ÇîªíËǵÇΩÇËÅAêVãKÇ…ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇçÏê¨Ç∑ÇÈïKóvǙdžÇÈǩǫǧǩÇîªífǵÇΩÇËÅAÇ≥ÇÁÇ…ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™è»ó™éûÇ≈ëIëÇ≥ÇÍǃǢÇÈDZÇΔÇÉhÉâÉCÉoÇ…í ímÇ∑ÇÈDZÇΔÇâ¬î\DžǵNjÇ∑ÅBà»â∫Ç…ÅADZÇÍÇÁÇÃÉZÉåÉNÉ^ÇégópÇ∑ÇÈç€Ç…ïKóvÇ»ç\ë¢ëÃÇé¶ÇµÇ‹Ç∑ÅB
// PrGeneral opÉRÅ[Éh
enum
{
kDTPGetPrinterInfo = 23,
kDTPIsSamePrinterInfo = 24,
kDTPSetDefaultPrinterInfo = 25
};
// ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃéÌï ÅiÉAÉhÉåÉXÉ^ÉCÉvÅj
enum
{
kDTPUnknownPrinterType = -1, // éÌï ïsñæ
kDTPSerialPrinterType = 0, // ÉVÉäÉAÉãÉvÉäÉìÉ^
kDTPAppleTalkPrinterType = 1, // AppleTalkÉvÉäÉìÉ^
kDTPTCPIPPrinterType = 2, // TCP/IPÉvÉäÉìÉ^
kDTPSCSIPrinterType = 3, // SCSIÉvÉäÉìÉ^
kDTPUSBPrinterType = 4 // USBÉvÉäÉìÉ^
};
// ÉVÉäÉAÉãÉ|Å[Ég
enum
{
kDTPUnknownPort = -1, // Communications ToolboxǻǫÇ≈ÅAÉvÉäÉìÉ^É|Å[ÉgÇ‚
// ÉÇÉfÉÄÉ|Å[Égà»äOÇÃÉVÉäÉAÉãÉ|Å[ÉgDžLJëŒâûǵǃǢÇÈèÍçá
kDTPPrinterPort = 0, // ÉvÉäÉìÉ^É|Å[Ég
kDTPModemPort = 1 // ÉÇÉfÉÄÉ|Å[Ég
};
// ÉVÉäÉAÉãÉvÉäÉìÉ^ÇÃÉAÉhÉåÉX
typedef struct
{
short port; // kDTPPrinterPortÅAkDTPModemPortÅAkDTPUnknownPortÇÃÇ¢Ç∏ÇÍÇ©
Str31 portName; // portÇ≈éwíËÇ≥ÇÍÇΩÉVÉäÉAÉãÉ|Å[ÉgÇÃñºèÃ
} DTPSerialAddress;
// AppleTalkÉvÉäÉìÉ^ÇÃÉAÉhÉåÉX
typedef struct
{
Str32 nbpName;
Str32 nbpZone;
Str32 nbpType;
} DTPAppleTalkAddress;
// TCP/IPÉvÉäÉìÉ^ÇÃÉAÉhÉåÉX
typedef struct
{
Str255 TCPIPAddress;
Str255 queueName;
} DTPTCPIPAddress;
// SCSIÉvÉäÉìÉ^ÇÃÉAÉhÉåÉX
typedef struct
{
short id; // SCSIî‘çÜ
} DTPSCSIAddress;
// USBÉvÉäÉìÉ^ÇÃÉAÉhÉåÉX
typedef struct
{
Str255 name; // ÉvÉäÉìÉ^ñº
} DTPUSBAddress;
// PrGeneralÇ…ìnÇ∑èÓïÒ
typedef struct
{
Str31 dtpDefaultName; // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç…égópÇ≥ÇÍÇÈè»ó™éûÇÃñºëO
short printerType; // kDTPSerialPrinterTypeÅAkDTPAppleTalkPrinterTypeÅA
// kDTPTCPIPPrinterTypeÅAkDTPSCSIPrinterTypeÅA
// kDTPUSBPrinterTypeÅAkDTPUnknownPrinterTypeÇÃÇ¢Ç∏ÇÍÇ©
// ÉvÉäÉìÉ^éÌï å≈óLÇÃèÓïÒ
union
{
DTPSerialAddress serial;
DTPAppleTalkAddress appleTalk;
DTPTCPIPAddress tcpip;
DTPSCSIAddress scsi;
DTPUSBAddress usb;
} u;
// ÉhÉâÉCÉoå≈óLÇÃèÓïÒÇÕîCà”Ç…í«â¡Ç≈Ç´ÇÈ
} DTPPrinterInfo, **DTPPrinterInfoHandle;
typedef struct
{
short iOpCode; // kDTPGetPrinterInfoÅAkDTPIsSamePrinterInfoÅA
// kDTPSetDefaultPrinterInfoÇÃÇ¢Ç∏ÇÍÇ©
short iError;
long iCommand;
DTPPrinterInfoHandle printerInfo;
} TDTPPrGeneralData;
ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\Ç…ëŒâûǵǃǢÇÈDZÇΔÇFinderÇ…ímÇÁÇπÇÈÇΩÇflÇ…ÇÕÅAÉvÉäÉìÉ^ÉhÉâÉCÉoÇÃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇ…'dtpi' ÉäÉ\Å[ÉXÇí«â¡Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB'dtpi' ÉäÉ\Å[ÉXÇÕà»â∫ÇÃÇÊǧDžíËã`Ç≥ÇÍǃǢNjÇ∑ÅB
// ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃèÓïÒÉäÉ\Å[ÉX
#define kDTPInfoResType 'dtpi'
#define kDTPInfoResID -8192
// ÉTÉ|Å[ÉgÇ≥ÇÍǃǢÇÈê⁄ë±ï˚ñ@
#define kDTPUnknownConnection 0x00000000 // ê⁄ë±ï˚ñ@ïsñæ
#define kDTPSerialConnection 0x00000001 // ÉVÉäÉAÉãê⁄ë±
#define kDTPSCSIConnection 0x00000002 // SCSIê⁄ë±
#define kDTPAppleTalkConnection 0x00000004 // AppleTalkê⁄ë±
#define kDTPTCPIPConnection 0x00000008 // TCP/IPê⁄ë±
#define kDTPUSBConnection 0x00000010 // USBê⁄ë±
// ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç™ÉTÉ|Å[ÉgÇ∑ÇÈí«â¡ã@î\
#define kDTPBasicFeatures 0x00000000 // ÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃäÓñ{ã@î\ÇÃÇ›ÇÉTÉ|Å[Ég
typedef struct
{
long features; // kDTPBasicFeaturesÅiMacOS 8.5ÇÕäÓñ{ã@î\ÇÃÇ›ÇÉTÉ|Å[ÉgǵNjÇ∑Åj
long connectionType; // kDTPUnknownConnectionç≥ÇÕ
// kDTPSerialConnectionÅAkDTPSCSIConnectionÅA
// kDTPAppleTalkConnectionÅAkDTPTCPIPConnectionÅA
// kDTPUSBConnectionÇÃåãçá
} DTPInfoResource;
ÉZÉåÉNÉ^Ç≈ÉTÅ[ÉhÉpÅ[ÉeÉBêªÇÃÉvÉäÉìÉ^ÉhÉâÉCÉoÇ™ëIëÇ≥ÇÍÇÈÇΔÇ´ÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\ÇÕàÍòAÇÃPrGeneral ÉRÅ[ÉhÇ…ÇÊǡǃǪÇÃÉhÉâÉCÉoÇåƒÇ—èoǵNjÇ∑ÅBÇ‹Ç∏ç≈èâÇ…ÅAǪÇÃÉvÉäÉìÉ^ÉhÉâÉCÉoÇ…ÇÊǡǃçÏê¨Ç≥ÇÍÇΩǪÇÍǺÇÍÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^DžǬǢǃÅAkIsSamePrinterInfo ÉZÉåÉNÉ^Çä‹ÇfiåƒÇ—èoǵǙé¿çsÇ≥ÇÍÅAåªç›ëIëÇ≥ÇÍǃǢÇÈÉvÉäÉìÉ^Ç™åàíËÇ≥ÇÍÇ‹Ç∑ÅBDZÇÍÇ…ëŒÇµÇƒÅAÉhÉâÉCÉoÇÕÅATPrinterInfoPrGeneralData ÉåÉRÅ[ÉhÇÃiError ÉtÉBÅ[ÉãÉhÇ…èÓïÒÇèëÇ´çûÇÒÇ≈âûìöǵNjÇ∑ÅBÉhÉâÉCÉoÇ™åªç›ÇÃÉvÉäÉìÉ^Ç≈džÇÈÇΔîªífǵÇΩÉvÉäÉìÉ^Ç™kIsSamePrinterInfo ÉZÉåÉNÉ^Ç≈ìnÇ≥ÇÍÇΩèÓïÒÇΔàÍívÇ∑ÇÈèÍçáÅAÉhÉâÉCÉoÇÕiError ÉtÉBÅ[ÉãÉhÇ…noErr Çê›íËǵNjÇ∑ÅBÇ‹ÇΩÅAàÍívǵǻǢèÍçáÇÕÅAiError ÉtÉBÅ[ÉãÉhÇ…-1 Çê›íËǵNjÇ∑ÅB
ÉZÉåÉNÉ^Ç≈ëIëÇ≥ÇÍÇΩÉvÉäÉìÉ^Ç™ÅAÉhÉâÉCÉoÇ…ÇÊǡǃèäóLÇ≥ÇÍǃǢÇÈÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç…ä‹Ç‹ÇÍǃǢǻǢèÍçáÇÕÅAêVǵǢÉfÉXÉNÉgÉbÉvÉvÉäÉìÉ^ÇçÏê¨ÇµÅAkGetPrinterInfo ÉZÉåÉNÉ^Çä‹ÇfiPrGeneral ÇåƒÇ—èoǵǃÅAëIëÇ≥ÇÍǃǢÇÈÉvÉäÉìÉ^Ç…ëŒâûÇ∑ÇÈèÓïÒÇéÊìæÇµÇ‹Ç∑ÅBDZÇÃéûì_Ç≈ÅAÉhÉâÉCÉoÇ≈ÇÕprinterInfo ÉnÉìÉhÉãÇÃÉTÉCÉYÇïœçXǵǃÉvÉäÉìÉ^èÓïÒÇèëÇ´çûǛNjÇ∑ÅBçÏê¨ÇµÇΩÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^Ç…égópǵÇΩÇ¢ñºëOÇdtpDefaultName ÉtÉBÅ[ÉãÉhÇ…èëÇ´çûÇfiïKóvǙdžÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAÉhÉâÉCÉoÇ≈ÇÕÅAïKóvÇ…âûÇ∂ǃîCà”ÇÃÉvÉäÉìÉ^èÓïÒÇí«â¡Ç∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBǪÇÃèÓïÒÇï‘Ç∑ÇΔÅAÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\ägí£ÇÕDZÇÃèÓïÒÇÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃì‡ïîÇ…ï€ë∂ǵNjÇ∑ÅB
ÉÜÅ[ÉUÇ™ÅuÉvÉäÉìÉ^ÅvÉÅÉjÉÖÅ[ÅiÉfÉXÉNÉgÉbÉvÉvÉäÉìÉ^ÇÉNÉäÉbÉNÇ∑ÇÈÇΔFinderÇ…ï\é¶Ç≥ÇÍÇÈÅjÇÃÅuè»ó™éûÉvÉäÉìÉ^Ç…éwíËÅvÉRÉ}ÉìÉhÇégǡǃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÇ¢Ç∏ÇÍÇ©ÇëIëÇ∑ÇÈÇΔÇ´ÅAÉhÉâÉCÉoÇÕkSetDefaultPrinterInfo ÉZÉåÉNÉ^Çä‹ÇfiPrGeneral åƒÇ—èoǵÇé¿çsǵNjÇ∑ÅBDZÇÃåƒÇ—èoǵÇéÛÇØéÊÇ¡ÇΩÇΔÇ´ÇÕÅAÉhÉâÉCÉoÇ™ï€éùǵǃǢÇÈì‡ïîê›íËÇïœçXǵǃÇ≠ÇæÇ≥Ç¢ÅBǪÇÃåãâ ÅAéÛÇØéÊÇ¡ÇΩDTPPrinterInfo Ç…ÇÊǡǃéwíËÇ≥ÇÍÇÈÉvÉäÉìÉ^Ç™ÉhÉâÉCÉoÇÃåªç›ëIëÇ≥ÇÍǃǢÇÈÉvÉäÉìÉ^Ç…Ç»ÇËÇ‹Ç∑ÅB
ñ¢óàÇÕÇ∑ÇÆÇªÇ±Ç…Ç†ÇÈ
èâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ÇÉTÉ|Å[ÉgÇ∑ÇÈÉhÉâÉCÉoÇÇ∑Ç≈Ç…äJî≠ǵǃǢÇÈèÍçáÅAè´óàÇ…ÇÌÇΩǡǃå›ä∑ê´Çà€éùÇ∑ÇÈÇΩÇflÇÃç≈ëPÇÃëIëÇÕÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ÇÃÉTÉ|Å[ÉgÇí«â¡Ç∑ÇÈDZÇΔÇ≈Ç∑ÅBǵǩǵÅAÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸ÇΔÇÃäiì¨ÇénÇflÇΩnjǩÇËÇ≈ÅAMac OS 8ÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\ÇÃÇ›ÇÉTÉ|Å[ÉgǵÇÊǧÇΔǵǃǢÇÈèÍçáÇÕÅAåªç›ÇÃÉfÉXÉNÉgÉbÉv•ÉvÉäÉìÉ^ã@î\Ç…â¡Ç¶Çƒèâë„ÇÃÉoÉbÉNÉOÉâÉEÉìÉhàÛç¸Ç‡ÉTÉ|Å[ÉgÇ∑ÇÈDZÇΔÇã≠Ç≠Ç®ä©ÇflǵNjÇ∑ÅBDZǧÇ∑ÇÍÇŒÅAé¿çsÇ∑ÇÈMac OSÇÃÉoÅ[ÉWÉáÉìÇ…ä÷åWÇ»Ç≠ÅAÉÜÅ[ÉUÇÕÇÊÇËàÍä—ǵÇΩàÛç¸ëÄçÏÇåoå±Ç≈Ç´ÇÈÇÊǧDžǻÇÈÇÕÇ∏Ç≈Ç∑ÅB
|